【问题标题】:Remove same numbers in listview in C#在 C# 的列表视图中删除相同的数字
【发布时间】:2015-08-13 04:24:49
【问题描述】:

基本上,我的程序生成随机数 1,2 或 3 并循环 9 次。我想知道如何从ListView 中删除重复的数字,所以它只包含 1 2 3。

这可以使用 IEnumerable.Except 来完成吗?

private void button3_Click(object sender, EventArgs e)
{
     Random rand = new Random();
     for (int i = 1; i < 10; i++)
     {
          lbl_Numb_1.Text = rand.Next(1, 4).ToString();
          ListViewItem lvi = new ListViewItem(lbl_Numb_1.Text);

          listView3.Items.Add(lvi);
     }
}

【问题讨论】:

  • @taji01:这是使用 WinForms 还是 WPF?
  • @Abhishek 在 WinForms 中

标签: c# .net winforms listview random


【解决方案1】:

您可以使用HashSet 来存储您的号码。

或使用 LINQ 和 distinct 删除重复值,如下所示:

var values = Enumerable.Range(0, 9).OrderBy(x => rng.Next(1, 4)).Distinct();
foreach (var value in values)
{
   ListViewItem lvi = new ListViewItem(value);
   listView3.Items.Add(lvi);
}

如果你想使用第二个变体,不要忘记添加命名空间:

using System.Linq;

【讨论】:

  • 我可以使用 Enumerable.Except 来做到这一点吗?
  • 没有。 Except 产生两个序列的集合差。在您的情况下,您应该使用 distinct。
  • 我如何将它添加到我的代码中它给我一个红色的错误行@Artem Kulikov
  • 如果你想使用 LINQ 你应该添加命名空间: using System.Linq;
  • System.Linq 已在使用中。问题是当我复制并粘贴您的代码时,列表视图中的数据没有填充。 @Artem Kulikov
【解决方案2】:

基本上,您可以循环这些值并仅选择带有HashSet 的不同值

【讨论】:

    【解决方案3】:

    只需添加一个检查以查看它是否已存在于列表中:

    if (!listview3.Items.Contains(lvi))
        listview3.Items.Add(lvi);
    

    或者您可以只创建同一列表的Distinct 版本:

    List1 = Listview3.Distinct();
    

    【讨论】:

    • 列表视图仍显示重复的 1 2 3 列表。我只需要数字 1 2 3 在列表视图中显示一次。
    • 应该可以。当您将每个项目(lvi)添加到列表时,它会检查列表是否已经在列表中,如果不是,它将添加它。
    • @taji01 确保包含! - 检查项目是否不在列表中
    【解决方案4】:

    您可以检查列表视图项目是否已经包含数字

    listView3.Items.Contains(lvi)
    

    或者简单地创建一个列表并添加数字,然后list.Distinct() 将返回不同的元素。然后您可以将列表分配给 listview 的 ItemsSource 属性。

    【讨论】:

      【解决方案5】:

      试试这个,这段代码会生成唯一的随机数并添加到listView3

      int smallestNumber = 1;
      int biggestNumber = 10;
      
      //Determine the amount of random numbers
      int amountOfRandomNumbers = 10;
      
      //Create a list of numbers from which the routine
      //shall choose the result numbers
      var possibleNumbers = new List<int>();
      for (int i = smallestNumber; i <= biggestNumber; i++)
          possibleNumbers.Add(i);
      
      //Initialize a random number generator
      Random rand = new Random();
      
      //For-loop which picks each round a unique random number
      for (int i = 0; i < amountOfRandomNumbers; i++)
      {
           //Generate random number
           int randomNumber = rand.Next(1, possibleNumbers.Count) - 1;         
           ListViewItem lvi = new ListViewItem(possibleNumbers[randomNumber].ToString());
           listView3.Items.Add(lvi);
           //Remove the chosen result number from possible numbers list
           possibleNumbers.RemoveAt(randomNumber);
      }
      

      【讨论】:

        【解决方案6】:

        希望这对人们有所帮助。

        1. 创建一个可以搜索值并返回 ListViewItemCollection 的方法。

        2. 在“删除重复项”按钮中。

        编辑 - 如果您希望它为 Enumerable,则必须修改您创建的随机数。

        1. 创建一个单独的可访问列表,每次在 ListView 中添加内容时,都必须在 List&lt;object&gt; 中添加。

        1. 您的“删除重复项”按钮不需要从 ListView 本身进行循环,因为您可以使用 List&lt;object&gt; 对 LINQ 功能进行更多访问。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2019-07-06
          • 2020-03-15
          • 1970-01-01
          • 1970-01-01
          • 2015-02-04
          相关资源
          最近更新 更多