1

計算を含む文字列があります。各エントリには、次のエントリの間にスペースがあります。最新の20エントリのみを保持するにはどうすればよいですか?

Label2.text += TextBox1.Text + "+" + TextBox2.Text + "=" + Label1.Text + " ";

出力は次のとおりです。

20 + 20 = 40 40 + 20 = 60 60 + 20 = 80

4

4 に答える 4

3

string.Split(' ').Reverse().Take(20)

または、David&Grooが他のコメントで指摘したように

string.Split(' ').Reverse().Take(20).Reverse()

于 2013-02-27T16:55:53.650 に答える
3

おそらく、アイテムのキュー (先入れ先出し構造) を維持する必要があります。

// have a field which will contain calculations
Queue<string> calculations = new Queue<string>();

void OnNewEntryAdded(string entry)
{
    // add the entry to the end of the queue...
    calculations.Enqueue(entry);

    // ... then trim the beginning of the queue ...
    while (calculations.Count > 20)
        calculations.Dequeue();

    // ... and then build the final string
    Label2.text = string.Join(" ", calculations);
}

whileループはおそらく 1 回しか実行されず、簡単に に置き換えることができることに注意してくださいif(ただし、これはキューが複数の場所から更新されている場合のフェイルセーフです)。

また、Labelアイテムのリストを保持するための a が本当に適切なコントロールなのだろうか?

于 2013-02-27T16:53:47.650 に答える
1
string[] calculations = yourString.Split(' ');
string[] last20 = calculations.Skip(Math.Max(0, calculations.Count() - 20).Take(20);
于 2013-02-27T16:45:29.197 に答える
1

文字列分割を使用する

string.Split(' ').Take(20)

最新のものが最後にある場合は、それを使用できOrderByDescendingますTake20

string.Split(' ').Select((n, i) => new { Value = n, Index = i }).OrderByDescending(i => i.Index).Take(20);
于 2013-02-27T16:43:23.360 に答える