簡體   English   中英

我如何檢查行是否相同?

[英]How can i check if the lines are identical?

private bool displayed;
private void PostMessage()
{
    for (int i = 0; i < ScrollLabel._lines.Length; i++)
    {
        for (int x = 0; x < WordsList.words.Length; x++)
        {
            if (ScrollLabel._lines[i].Contains(WordsList.words[x]) && !displayed)
            {
                displayed = true;
                lineToPost = ScrollLabel._lines[i];
                PostFacebookWall(LongaccessToken, lineToPost + Environment.NewLine + Environment.NewLine + "נשלח באופן אוטומטי כניסיון דרך תוכנה");
            }
        }
    }
}
  1. 我每秒在計時器滴答事件中調用此方法。

    • 但是,如果變量字符串lineToPost相同,則不會再次發送。 但是這可能是lineToPost可能在其中包含完全相同的單詞,但整行不同的一種情況,所以我想發送它。

    • 只有整行都一樣,才不要postFacebookWall

    • 如果整行不相同,但是與其他行相同,則使用PostFacebookWall方法。

  2. 我使用的是bool變量,因此不會重復發送同一行。

    • 我希望它發送一次,而不管是只有一行還是有多於一行。

問題是我現在使用bool的方式,它將發送一條線,然后再也不會發送任何其他行。

假設我了解您的問題,則可以存儲發送的行以檢測到沒有更改。

// key: line index, value: sent line 
private Dictionary<int, string> sent = new Dictionary<int, string>();

private void PostMessage()
{
   for (int i = 0; i < ScrollLabel._lines.Length; i++)
    {
        var line = ScrollLabel._lines[i];

        if(sent.ContainsKey(i) && sent[i] == line) continue;

        sent[i] = line;

        if (WordsList.Any(line.Contains))                           
          PostFacebookWall(LongaccessToken, line + Environment.NewLine + Environment.NewLine 
                                                 + "נשלח באופן אוטומטי כניסיון דרך תוכנה");
    }
}

也許我監督了一些事情,但是我只記得字符串變量中的最后一行,並且僅當當前行與最后一行不同時才執行內部for循環。

這似乎非常適合於Reactive Extensions 使用Rx,您可以將行的推送與實際的發送操作分離。

您可能會有一個公開IObservable<Line> ,另一個負責發送的類。 在發件人中,您將訂閱可觀察的消息,指出只有與上次推送的行不同時才需要換行。 您可以為此使用DistinctUntilChanged

Rx是一個需要理解的復雜框架。 如果這是某種玩具示例,而您對Rx不了解,那么我可能會保留其他已發布的解決方案之一。 如果這是一個比較嚴重的/專業的工作,雖然,我會徹底地考慮方法,因為它是優雅和簡單的實施和維護。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM