增加数组中重复元素值的值

时间:2017-04-26 03:45:52

标签: 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, 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();
}

此应用程序的输出是

3
3
3

很好,我已将值添加到新列表并进行了调整。但是,我没有在我的清单中保证一个独特的价值。 我该怎么做?

原则是不使用哈希表,我必须创建一个。哈希表必须具有唯一键,因此要处理重复尝试(冲突)。我不希望删除哈希键,我希望以使其唯一的形式处理它。因此,我的方法应该类似于value = value + Random.Next(),因为这会产生更准确的结果,因为它与'value = value +1'相关。但是,这并不能确保唯一的输入。

提前致谢。

1 个答案:

答案 0 :(得分:0)

您可以使用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;

请注意,此方法不稳定。这意味着它不保证保持您的物品的顺序。这也可以在理论上变成无限循环。