C# 增加数组中重复元素值的值
我有一些C代码。这段代码的目的是生成一个整数列表,测试它们的值以确定它们是否是重复的条目值,并在列表中出现任何重复条目时将其更改为唯一的C# 增加数组中重复元素值的值,c#,C#,我有一些C代码。这段代码的目的是生成一个整数列表,测试它们的值以确定它们是否是重复的条目值,并在列表中出现任何重复条目时将其更改为唯一的 static int oldHash, newHash; // used if collision true, // renews current hash static Boolean Uniqiue; // only update variables? public static int collisionHandling(int oldHash, b
static int oldHash, newHash; // used if collision true, // renews current hash
static Boolean Uniqiue; // only update variables?
public static int collisionHandling(int oldHash, bool unique)
{
if (!unique)
{
newHash = oldHash + 1;
return newHash;
}
else
{
newHash = oldHash;
return 0;
}
}
public static int hash(int value) {
return value +1;
}
static void Main(string[] args)
{
List<int> intLst = new List<int>(20);
intLst.Add(1);
intLst.Add(1);
intLst.Add(1);
int tst = 0;
while (tst <= intLst.Count - 1)
{
int hashResult = hash(intLst[tst]);
if (intLst.Contains(hashResult))
{
int collisionResult = collisionHandling(hashResult, false);
Console.WriteLine(collisionResult);
}
tst += 1;
}
Console.ReadLine();
}
太好了,我已经在一个新列表中添加了值并进行了调整。但是,我还没有确定列表中的唯一值我该怎么做?
原则是不使用哈希表,我必须创建一个。哈希表必须具有唯一的键,因此要处理重复尝试(冲突)。我不希望删除散列键,我希望以使其唯一的形式处理它。因此,我的方法应该类似于value=value+Random.Next()
,因为这将有一个与“value=value+1”相对应的更准确的结果。但是,这并不能确保条目的唯一性
提前感谢。您可以使用linq
Distinct
从列表中提供一组。(即从列表中删除重复项)
然后在删除重复项时添加新编号
var list = ...;
var unique = list.Distinct().ToList();
var random = new Random();
for(int i = unique.Count(); i < list.Count(); i++)
{
int r;
do
{
r = random.Next();
} while(unique.Contains(r))
unique.Add(r);
}
// unique is the result you want
list = unique;
var列表=。。。;
var unique=list.Distinct().ToList();
var random=新的random();
for(int i=unique.Count();i
请注意,此方法不稳定。这意味着它不能保证您的物品的顺序。理论上,这也可以变成无限循环
var list = ...;
var unique = list.Distinct().ToList();
var random = new Random();
for(int i = unique.Count(); i < list.Count(); i++)
{
int r;
do
{
r = random.Next();
} while(unique.Contains(r))
unique.Add(r);
}
// unique is the result you want
list = unique;