C# 从int数组向int hashset添加元素
可以对数组进行迭代,然后逐个向哈希集添加元素。是否有任何方法可以在不迭代数组元素的情况下将整数从int数组添加到int哈希集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[] 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);