如何删除C#中的重复数字(int)



如何使用for循环删除列表框中的重复项。我试过几种方法,但都不起作用。我尝试了最后一种方法,但没有删除重复项,而是将它们替换为0。

我的任务是在一个列表框中生成一个随机数,并在一个单独的列表框中分离为偶数和奇数。然后我必须将平均数和所选数计算成立方体和平方根。一切都很好。除了副本。需要一些帮助。

using System;
using System.Collections;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
namespace AssignmentQ1
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
private void btnGenerate_Click(object sender, EventArgs e)
{

List<int> lstRN = new List<int>();
Random rnd = new Random();
int numbers = rnd.Next(1, 1000);
int item = 0;
int digit = 0;
int totalOdd, totalEven, countEven, countOdd;
totalOdd = totalEven = countEven = countOdd = 0;
double avg = 0.0;
double sum = 0.0;

for (int i=0; i<numbers; i++)
{
item = rnd.Next(1, 300);
lstRN.Add(item);

}
lstRN.Sort();

digit = lstRN[0];
for (int k= 0; k<lstRN.Count; k++)
{
if(lstRN[k] == digit)
{
lstRN[k]=0;
}
else
{
digit = lstRN[k];
}
}

foreach (int num in lstRN)
{
if(num % 2 == 0)
{
lstEven.Items.Add(num);
totalEven += num;

}
else
{
lstOdd.Items.Add(num);
totalOdd += num;

}
}



/**var _items1 = this.lstRN.Items.Cast<string>().Distinct().ToList();
this.lstRN.Items.Clear();
foreach (var item1 in _items1)
{
this.lstEven.Items.Add(item1);
}
var _items2 = this.lstRN.Items.Cast<string>().Distinct().ToList();
this.lstRN.Items.Clear();
foreach (var item2 in _items2)
{
this.lstOdd.Items.Add(item2);
}**/

countEven = lstEven.Items.Count;
lblCountEven.Text = countEven.ToString();
avg = item / countEven;
lblAverageEven.Text = avg.ToString();
countOdd = lstOdd.Items.Count;
lblCountOdd.Text = countOdd.ToString();
avg = item / countOdd;
lblAverageOdd.Text = avg.ToString();

}
private void lstEven_SelectedIndexChanged(object sender, EventArgs e)
{
string chosen = lstEven.SelectedItem.ToString();
int c = int.Parse(chosen);
double sr = Math.Sqrt(c);
lblSquare.Text = sr.ToString();
}
private void lstOdd_SelectedIndexChanged(object sender, EventArgs e)
{
string chosen = lstOdd.SelectedItem.ToString();
int c = int.Parse(chosen);
double cube = Math.Pow(c, 3);
lblCube.Text = cube.ToString();
}
private void btnExit_Click(object sender, EventArgs e)
{
Application.Exit();
}
}
}

如果你是一个LINQ瘾君子,你可以使用以下扩展方法

public static IEnumerable<T> RemoveDuplicates<T>(this IEnumerable<T> source)
{
return source.GroupBy(x => x).Select(y => y.First());
}

它将收集所有相等的项目,并选择其中的第一个

有专门的工具/类型-HashSet<int>

var uniqueNumbers = numbers.ToHashSet();

在集合中收集唯一随机数

var randomNumbers = new HashSet<int>();
while (randomNumbers.Count < numbers)
{
var number = rnd.Next(1, 300);
randomNumbers.Add(number)
}

只有当值还不在集合中时,.Add方法才会添加给定的值
HashSet.Add(T(方法

最新更新