0

listViewを並べ替える必要はありません。列から最大値を取得するだけで、その列のすべての値は数値になります。なんらかの方法でキャストできれば、IEnumerable<int>LINQを使用できます。

アップデート

私の既存のコード:DrawArrayは乱数をindex.ToString()含む配列です。別のリストや配列を作成せずに、列の最大値を取得する必要があります。

for (int i = 0; i < Rounds; i++)
{
ListViewItem lvItem = new ListViewItem(i.ToString());

lvItem.SubItems.Add(new ListViewItem.ListViewSubItem(lvItem, index.ToString()));

int[] DrawArray = Draw(DrawsPerRound, RoundSize);

lvItem.SubItems.Add(new ListViewItem.ListViewSubItem(lvItem, DrawArray.Aggregate("", (s, t) => s + ", " + t.ToString()).TrimStart(new char[] { ',' })));

lvItem.SubItems.Add(new ListViewItem.ListViewSubItem(lvItem, "No"));

lvItem.BackColor = Color.PaleVioletRed;

listView1.Items.Add(lvItem);
}
4

2 に答える 2

1

ListView.ItemsListViewItemCollection継承ですIList, ICollection, IEnumerable

linqによって、必要なものを取得できます。

System.Nullable<int> max = (
              from m in listView1.Items.Cast<ListViewItem>() 
              select int.ParseInt(m.SubItems[0].Text)).Max();
于 2012-05-17T18:29:38.207 に答える
1

キャストなどが欠けている可能性があり、少し醜いですが、ここにアイデアがあります:

var max = listView1.Items.Cast<ListViewItem>().Max(x => int.Parse(x.SubItems[0].Text));

これはLINQを使用するためusing System.Linq;、ファイルに.NET>=3.5を使用していることを確認してください。

于 2012-05-17T18:31:59.990 に答える