C# 语法 - 用逗号将字符串拆分为数组、转换为通用列表以及倒序

发布于 2024-07-09 02:21:35 字数 165 浏览 11 评论 0原文

正确的语法是什么:

IList<string> names = "Tom,Scott,Bob".Split(',').ToList<string>().Reverse();

我搞砸了什么? TSource 是什么意思?

What is the correct syntax for this:

IList<string> names = "Tom,Scott,Bob".Split(',').ToList<string>().Reverse();

What am I messing up?
What does TSource mean?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(6

人疚 2024-07-16 02:21:35

问题是您正在调用 List.Reverse() ,它返回 void

您可以这样做:

List<string> names = "Tom,Scott,Bob".Split(',').ToList<string>();
names.Reverse();

或:

IList<string> names = "Tom,Scott,Bob".Split(',').Reverse().ToList<string>();

后者成本更高,因为反转任意 IEnumerable 涉及缓冲所有数据,然后生成所有数据 - 而 List code> 可以“就地”完成所有反转。 (此处的区别在于,它调用 Enumerable.Reverse() 扩展方法,而不是 List.Reverse() 实例方法。

)高效,您可以使用:

string[] namesArray = "Tom,Scott,Bob".Split(',');
List<string> namesList = new List<string>(namesArray.Length);
namesList.AddRange(namesArray);
namesList.Reverse();

这可以避免创建任何大小不合适的缓冲区 - 代价是在一个可以做的地方采取四个语句...一如既往,在实际用例中权衡可读性与性能。

The problem is that you're calling List<T>.Reverse() which returns void.

You could either do:

List<string> names = "Tom,Scott,Bob".Split(',').ToList<string>();
names.Reverse();

or:

IList<string> names = "Tom,Scott,Bob".Split(',').Reverse().ToList<string>();

The latter is more expensive, as reversing an arbitrary IEnumerable<T> involves buffering all of the data and then yielding it all - whereas List<T> can do all the reversing "in-place". (The difference here is that it's calling the Enumerable.Reverse<T>() extension method, instead of the List<T>.Reverse() instance method.)

More efficient yet, you could use:

string[] namesArray = "Tom,Scott,Bob".Split(',');
List<string> namesList = new List<string>(namesArray.Length);
namesList.AddRange(namesArray);
namesList.Reverse();

This avoids creating any buffers of an inappropriate size - at the cost of taking four statements where one will do... As ever, weigh up readability against performance in the real use case.

肥爪爪 2024-07-16 02:21:35

我意识到这个问题已经很老了,但我也有类似的问题,只是我的字符串中包含空格。 对于那些需要知道如何用逗号分隔字符串的人:

string str = "Tom, Scott, Bob";
  IList<string> names = str.Split(new string[] {","," "},
  StringSplitOptions.RemoveEmptyEntries);

StringSplitOptions 删除仅是空格字符的记录...

I realize that this question is quite old, but I had a similar problem, except my string had spaces included in it. For those that need to know how to separate a string with more than just commas:

string str = "Tom, Scott, Bob";
  IList<string> names = str.Split(new string[] {","," "},
  StringSplitOptions.RemoveEmptyEntries);

The StringSplitOptions removes the records that would only be a space char...

書生途 2024-07-16 02:21:35
List<string> names = "Tom,Scott,Bob".Split(',').Reverse().ToList();

这个有效。

List<string> names = "Tom,Scott,Bob".Split(',').Reverse().ToList();

This one works.

诺曦 2024-07-16 02:21:35

尝试这个:

List<string> names = new List<string>("Tom,Scott,Bob".Split(','));
names.Reverse();

Try this:

List<string> names = new List<string>("Tom,Scott,Bob".Split(','));
names.Reverse();
一页 2024-07-16 02:21:35

您在这里缺少的是 .Reverse() 是一个 void 方法。 无法将 .Reverse() 的结果分配给变量。 但是,您可以更改使用 Enumerable.Reverse() 的顺序并获取结果。

var x = "Tom,Scott,Bob".Split(',').Reverse().ToList<string>()

不同之处在于 Enumerable.Reverse() 返回一个 IEnumerable。 而不是无效返回

What your missing here is that .Reverse() is a void method. It's not possible to assign the result of .Reverse() to a variable. You can however alter the order to use Enumerable.Reverse() and get your result

var x = "Tom,Scott,Bob".Split(',').Reverse().ToList<string>()

The difference is that Enumerable.Reverse() returns an IEnumerable<T> instead of being void return

ま柒月 2024-07-16 02:21:35

如果您尝试

  1. 使用多个分隔
  2. 符过滤任何空字符串修剪
  3. 前导/尾随空格

以下应该可以工作:

string str = "Tom Cruise, Scott, ,Bob | at";
IEnumerable<string> names = str.Split(new char[] {',', '|', ' '}, StringSplitOptions.RemoveEmptyEntries);

输出

  • 汤姆
  • 克鲁斯
  • 斯科特
  • 鲍勃
  • 现在

您显然可以按照其他人的建议反转顺序。

If you are trying to

  1. Use multiple delimiters
  2. Filter any empty strings
  3. Trim leading/trailing spaces

following should work:

string str = "Tom Cruise, Scott, ,Bob | at";
IEnumerable<string> names = str.Split(new char[] {',', '|', ' '}, StringSplitOptions.RemoveEmptyEntries);

Output

  • Tom
  • Cruise
  • Scott
  • Bob
  • at

Now you can obviously reverse the order as others suggested.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文