如何从字符串类型数组中删除整数?
Posted
技术标签:
【中文标题】如何从字符串类型数组中删除整数?【英文标题】:How to remove integers from a string type array? 【发布时间】:2020-09-27 03:17:43 【问题描述】:我有一个字符串类型的数组,其中包含数字和字符,例如 string[] TagsSeperatedArray="tag1","tag2","1234","" 我想从数组中删除 1234 和 ""。 我怎样才能做到这一点。有人可以帮帮我吗。我正在使用 asp.net c#。
foreach(var item in TagsSeperatedArray)
if()
【问题讨论】:
您不能从数组中删除元素,因为您无法更改大小。您可以将元素设置为 null - 这对您来说就足够了吗?如果您遇到的问题是检测数字字符串,我怀疑您应该查看Int32.TryParse
。
首先,请注意您不能从数组中“删除”任何内容 - 数组(根据定义)是固定大小的;你可以替换个值,或者你可以用更少个值创建一个新数组;使用List<string>
会更容易 - 这可能吗? (您可以从列表中删除)
重新打开,因为这不是要删除字符串 of 的数字部分。
@JonSkeet 是的,你可能是对的。
这能回答你的问题吗? How can I remove numbers/digits from strings in a List<string>?
【参考方案1】:
一种方法是:
var arr = new[] "tag1", "tag2", "1234", "" ;
Console.WriteLine(string.Join(",", arr)); // tag1,tag2,1234,
var newArr = arr.Where(value => !string.IsNullOrWhiteSpace(value)
&& !int.TryParse(value, out _)).ToArray();
Console.WriteLine(string.Join(",", newArr)); // tag1,tag2
但是请注意,这会分配一个额外的数组等;使用列表会更有效,因为您可以直接删除:
var list = new List<string> "tag1", "tag2", "1234", "" ;
Console.WriteLine(string.Join(",", list)); // tag1,tag2,1234,
list.RemoveAll(value => string.IsNullOrWhiteSpace(value) || int.TryParse(value, out _));
Console.WriteLine(string.Join(",", list)); // tag1,tag2
【讨论】:
【参考方案2】:您可以为此使用 Linq,例如:
TagsSeparatedArray.Where(item => !int.TryParse(item, out int _))
这将排除那些可以转换为int
的。
【讨论】:
【参考方案3】:基于@Marc Grawell 的回答
private string[] RemoveNumerics(string[] TheArray)
List<string> list = new List<string>();
list.AddRange(TheArray);
list.RemoveAll(value => string.IsNullOrWhiteSpace(value) || int.TryParse(value, out _));
return list.ToArray();
如果你不希望它作为 lambda 表达式:
foreach(string value in list)
if (string.IsNullOrWhiteSpace(value) || int.TryParse(value, out _))
list.Remove(value);
干杯
【讨论】:
您的替代方案(没有 lambda)会由于在枚举时修改集合而引发异常。以上是关于如何从字符串类型数组中删除整数?的主要内容,如果未能解决你的问题,请参考以下文章
如何从输入字符串中分离整数并将它们转换为 int 类型以允许对它们进行计算
Javascript - 如何按 3 种不同的属性类型对对象数组进行排序? (字符串、整数、布尔值)