我有這個作業 Python 代碼,它反轉輸入的所有字符的大小寫并回傳輸出:
return ''.join(letter.upper() if letter.islower() else (letter.lower() if letter.isupper() else letter) for letter in input())
在這一行中,For 回圈位于行尾而不是行,而不是在行之前或之上。
這在 C# 中可能嗎?我有以下函式的作業版本,其中 text1 是輸入,但我只能將其壓縮為 3 行而不是 1 行:
string result = string.Empty;
foreach(char letter in text1) result = Char.IsLower(letter) ? letter.ToString().ToUpper() : (Char.IsUpper(letter) ? letter.ToString().ToLower() : letter.ToString());
return result;
我認為可以通過這樣做來實作:
return String.Join('', Char.IsLower(letter) ? letter.ToString().ToUpper() : (Char.IsUpper(letter) ? letter.ToString().ToLower() : letter.ToString()) foreach(char letter in text1));
但是語法最后不允許使用 foreach 生成器。
我對 C# 相當陌生,所以我可能會遺漏一些明顯的東西,但我在網上找不到任何關于在這樣的陳述句末尾使用生成器的參考。
uj5u.com熱心網友回復:
(something for x in iterable)在 Python 中是一種特殊的理解語法,可用于基于現有的可迭代物件創建串列或生成器。它是一種特殊語法,與普通for回圈共享關鍵字,但與普通回圈沒有直接關系。語法是 Python 獨有的,在 C# 中沒有直接替代。
C# 中最接近的類似語言結構是 LINQ 運算式,它與Python 理解背后的目的非常匹配。使用 LINQ 運算式,您可以從可列舉(這是 .NET 的可迭代型別)開始,然后使用Where和SelectLINQ 方法在其上應用過濾器或映射。
因此,以 Python 中的以下示例為例:
example = 'Foo Bar!'
result = ''.join(letter.upper() if letter.islower() else (letter.lower() if letter.isupper() else letter) for letter in example)
print(result) #fOO bAR!
在 C# 中使用 LINQ 的直接等效項如下所示:
var example = "Foo Bar!";
var result = string.Join("", example.Select(letter =>
char.IsLower(letter) ? char.ToUpper(letter) :
char.IsUpper(letter) ? char.ToLower(letter) : letter
));
Console.WriteLine(result); // fOO bAR!
這是有效的,因為字串是一個可列舉的字符 ( IEnumerable<char>),因此您可以使用該Select方法將每個字母從源映射到一個新值。
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/341414.html
標籤:Python C# 蟒蛇-3.x foreach 发电机
上一篇:將檔案中的資料分配給字典物件
