Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/asp.net/37.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 从int数组向int hashset添加元素_C#_Asp.net_Arrays_Hashset - Fatal编程技术网

C# 从int数组向int hashset添加元素

C# 从int数组向int hashset添加元素,c#,asp.net,arrays,hashset,C#,Asp.net,Arrays,Hashset,可以对数组进行迭代,然后逐个向哈希集添加元素。是否有任何方法可以在不迭代数组元素的情况下将整数从int数组添加到int哈希集 int[] pagesid;//int array var deletepages = new HashSet<int>();//hashset pagesid= Array.ConvertAll(text.Split(','), s=>int.Parse(s)); //values from pagesid should be added t

可以对数组进行迭代,然后逐个向哈希集添加元素。是否有任何方法可以在不迭代数组元素的情况下将整数从int数组添加到int哈希集

 int[] pagesid;//int array
 var deletepages = new HashSet<int>();//hashset 
 pagesid= Array.ConvertAll(text.Split(','), s=>int.Parse(s));
 //values from pagesid should be added to hashset.
int[]pagesid//整数数组
var deletepages=newhashset()//哈希集
pagesid=Array.ConvertAll(text.Split(',),s=>int.Parse(s));
//pagesid中的值应添加到hashset中。
更新:

int[] pagesid;//int array
var deletepages = new HashSet<int>();//hashset 
foreach (XmlNode rule in pgmgmtrules)
{
  ruleresult=doc.ParseText(rule.InnerText, false);//parse rule
  if (ruleresult != "")
  { //if parsed rule result has value
    if (rule.Attributes["Action"].Value == "Delete")
    {
      var text=rule.Attributes["pageids"].Value;                                     
      pagesid= Array.ConvertAll(text.Split(','), s=>int.Parse(s));
     //add elements from pagesid array to hashset

    }
  }
}
int[]pagesid//整数数组
var deletepages=newhashset()//哈希集
foreach(pgmgmtrules中的XmlNode规则)
{
ruleresult=doc.ParseText(rule.InnerText,false);//解析规则
如果(规则结果!=“”)
{//如果解析的规则结果具有值
if(rule.Attributes[“Action”].Value==“Delete”)
{
var text=rule.Attributes[“pageids”].Value;
pagesid=Array.ConvertAll(text.Split(',),s=>int.Parse(s));
//将pagesid数组中的元素添加到hashset
}
}
}

没有办法-即使LINQ也帮不上忙:

 sids = text.Split(',') // It is still array no matter what use
    .Select(str => int.Parse(s)); // This is where the loop over the array actually works

 deletePages = new HashSet<int>()(sids);
您的流式字符串解析器可能如下所示:

public static class StringExtensions
{
    public static IEnumerable<String> StreamSplit(this String thisStr, char splitChar)
    {
        if (thisStr == null)
            throw new ArgumentNullException();

        Int32 lastSplitterIndex = -1;

        for (Int32 i = 0; i < thisStr.Length; i++)
        { 
            if (thisStr[i] == splitChar)
            {
                 yield return thisStr.Substring(lastSplitterIndex + 1, i - lastSplitterIndex - 1);
                 lastSplitterIndex = i;
            }
        }

        yield return thisStr.Substring(lastSplitterIndex + 1); 
    }
}
公共静态类StringExtensions
{
公共静态IEnumerable StreamSplit(此字符串为thistr,char splitChar)
{
if(thisStr==null)
抛出新ArgumentNullException();
Int32 lastSplitterIndex=-1;
对于(Int32 i=0;i

但性能只会有很小的提高(如果有的话)。因此,我认为您应该继续使用原始解决方案—只需使用
HashSet(IEnumerable)
构造函数。

您可以使用重载构造函数,它将
IEnumerable
作为参数,而不是使用默认构造函数
HashSet()

HashSet有一个接受可枚举项作为输入的。你可以写一些简单的东西,比如:

var ints=text.Split(',')
             .Select(s=>int.Parse(s));
var set-new HashSet(ints);
大多数内置泛型集合都接受IEnumerable作为源,因此不必手动迭代源

更新

从另一个注释来看,代码似乎将在循环中运行,
text
实际上是要处理的当前字符串

在这种情况下,更容易打破循环,创建所有文本的单个可枚举项,然后进行转换,例如:

var lines=new [] {"123,123","234,456"};

var ints=from line in lines
         from s in line.Split(',')
         select int.Parse(s);
var set=new HashSet(ints);

例如,以下代码段解析文件中的所有数字:

var lines=File.ReadAllLines(filePath);

var ints=from line in lines
         from s in line.Split(',')
         select int.Parse(s);
var set-new HashSet(ints);

从int数组中尝试这种简单的方法

 int[] pagesid;//int array
 var deletepages = new HashSet<int>();//hashset 
 pagesid = Array.ConvertAll("3,5,6,7".Split(','), s => int.Parse(s));
//values from pagesid should be added to hashset.
 var hashset = new HashSet<int>(pagesid);
int[]pagesid//整数数组
var deletepages=newhashset()//哈希集
pagesid=Array.ConvertAll(“3,5,6,7.Split(',')),s=>int.Parse(s));
//pagesid中的值应添加到hashset中。
var hashset=新的hashset(pagesid);

我是说没有迭代数组元素。实际上,对于集合的构造函数来说,接受IEnumerable作为源是一种常见的.NET习惯用法。但是String.Split返回一个数组。数组是IEnumerable的,但它们是数组-数组是创建的,而不是计算的。IEnumerable可根据需要进行处理。如果这是作者的意思。谢谢阿迪尔。但我不能每次都声明新的hashset,因为我正在循环中迭代,我希望它们继续添加到hashset中。@milindiantwar没有理由这样做。只需创建一个包含所有所需元素的IEnumerable,然后创建一个哈希集。例如,如果您有多个文本,对它们执行
选择
如果您正在迭代数组并希望传递所有元素,那么您可以在构造函数中传递数组,但如果您希望传递选择性元素,则首先获取过滤后的数组并将其传递给HashSet构造函数。如果以后要添加更多元素,则可以使用add方法。@Adil:我正在迭代xml节点。然后我得到整数数组中的元素。现在我需要将数组元素添加到hashset中,我需要在单词后面添加数组元素。我已经更新了问题。再次感谢adil。@Milindantwar我建议使用列表而不是int数组。请检查我的更新答案。构造函数接受任何IEnumerable。没有理由将其转换为列表,您只需毫无理由地创建另一个临时对象
var ints=text.Split(',')
             .Select(s=>int.Parse(s));
var set-new HashSet(ints);
var lines=new [] {"123,123","234,456"};

var ints=from line in lines
         from s in line.Split(',')
         select int.Parse(s);
var set=new HashSet(ints);
var ints=lines.SelectMany(line=>line.Split(','))
              .Select(s=>int.Parse(s));
var set-new HashSet(ints);
var lines=File.ReadAllLines(filePath);

var ints=from line in lines
         from s in line.Split(',')
         select int.Parse(s);
var set-new HashSet(ints);
 int[] pagesid;//int array
 var deletepages = new HashSet<int>();//hashset 
 pagesid = Array.ConvertAll("3,5,6,7".Split(','), s => int.Parse(s));
//values from pagesid should be added to hashset.
 var hashset = new HashSet<int>(pagesid);