c#里是否有类似 Python 中 list 的切片操作

2020-02-25 16:55:55 +08:00
 vtoexsir

比如 python 中,list1 = ['abc', 'blas', 'dsl'],
要将每个元素的第一个字符变成大写 list2 = ['Abc', 'Blas', 'Dsl'],
只需要如下操作即可:
list2 = [x[0].upper() + x[1:] for x in list1]

请问 c#里是否也有类似简洁明了的语法来实现?多谢!

10641 次点击
所在节点    C#
6 条回复
hahastudio
2020-02-25 17:09:17 +08:00
如果你在用 C# 8.0,那么有 x[1..^0]
不然的话,基本就是 Skip().Take() 了
xupefei
2020-02-25 17:13:55 +08:00
> var list = new []{"aaa","bbb","ccc"};
> var list2 = list.Select(t=>Char.ToUpper(t[0])+t[1..]);

Aaa
Bbb
Ccc
xupefei
2020-02-25 17:17:06 +08:00
@xupefei 或者用很像 py 的语法:
var list3 = from t in list select Char.ToUpper(t[0])+t[1..];
forgottencoast
2020-02-26 10:04:55 +08:00
C# 8.0 才能用类似 Python 的切片的写法。
低版本只能用字符串的 Substring 方法来代替了。
类似:
from t in list select Char.ToUpper(s[0]) + t.Substring(1);

其实这些自己写一个帮助方法也不费事,并不需要特别简明的语法。
charlie21
2020-04-11 22:06:45 +08:00
```
using System.Linq;
static void Test()
{
string[] arr = { "abc", "blas", "dsl" };
arr = arr.Select(i => Char.ToUpper(i[0]) + i[1..]).ToArray();
Array.ForEach(arr, Console.WriteLine);
}

```
output:
Abc
Blas
Dsl
mingl0280
2020-07-27 08:21:10 +08:00
@xupefei 正解,linq 就行了

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/647449

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX