如果不存在于不同的列表中,则仅将随机数放入列表中

时间:2015-10-28 03:39:41

标签: c# list loops hashset

我有另一个名为List<int> lCVars = new List<int>(); HashSet<int> hCVars = new HashSet<int>(); while (hCVars.Count < randCVarsCount) { hCVars.Add(rnd.Next(1, 11)); } lColVars = hsColVars.ToList();

的列表

我正在尝试使用从循环生成的hashSet生成另一个列表,如下所示,但是,我需要确保该数字在上面的列表中不存在:

rnd.Next

因此,在上面的循环中,我需要检查被比较的列表中是否已存在+[CIImage imageWithData:],并且无法弄清楚语法。

额外的眼睛会很棒。

2 个答案:

答案 0 :(得分:1)

您只需要一个随机数的临时变量,并使用它来检查它是否已存在。

可以添加一个else子句,只有HashSet才会添加到Add,如果它不在那里,但hs.Add(8); hs.Add(8); //hs will only have count of 1方法会这样做(即List<int> lCVars = new List<int>(); HashSet<int> hCVars = new HashSet<int>(); var rnd = new Random(); var randCVarsCount = 5; while (hCVars.Count < randCVarsCount) { var num = rnd.Next(1, 11); if (hCVars.Contains(num)) Console.WriteLine("already in there"); hCVars.Add(num); } lColVars = hsColVars.ToList();

omegaList.sort(
    [](const list<MetaData>& lhs, const list<MetaData>& rhs) {
       return lhs.front().getProcessRunTime() <
              rhs.front().getProcessRunTime();
});

答案 1 :(得分:1)

由于HashSet.ToList()方法返回新的List,因此将HashSet转换为List应保证List对象中值的唯一性。

ToList方法的源代码如下所示:

public static List<TSource> ToList<TSource> (this IEnumerable<TSource> source)
{
    Check.Source (source);
    return new List<TSource> (source);
}

在您的应用中,您只需要自己的临时变量来存储您要检查的随机数。下面的示例程序显示了这两种方法。

#define UNCONDITIONAL

using System;
using System.Collections.Generic;
using System.Linq;


namespace StackOverflow
{
    class MainClass
    {
        public static void Main (string[] args)
        {
            HashSet<int> hash = new HashSet<int>();
            Random rnd = new Random();

#if(UNCONDITIONAL)
            Console.WriteLine("Adding unconditionally...");
#else
            Console.WriteLine("Adding after checks...");
#endif

            while(hash.Count < 5)
            {
                int rv = rnd.Next (1, 11);
#if(UNCONDITIONAL)
                hash.Add (rv);
#else
                if(hash.Contains(rv))
                {
                    Console.WriteLine ("Duplicate skipped");
                }
                else
                {
                    hash.Add (rv);
                }
#endif
            }

            List<int> list = hash.ToList ();  // ToList() gives back a new instance
            foreach(var e in list)
            {
                Console.WriteLine (e);
            }
        }
    }
}

注意: UNCONDITIONAL符号只是为了让您更轻松地使用示例。您可以将其评论以查看这两种行为。

带有符号定义的示例输出:

Adding unconditionally...
5
10
2
6
3

带符号的示例输出已注释掉:

Adding after checks...
Duplicate skipped
7
3
4
2
10