C# - IEnumerable к разграниченной строке

Вы не можете изменить str 's __add__, но вы можете определить, как добавить свой класс в строки. Я не рекомендую это делать.

class MyClass(object):
    ...
    def __add__(self, other):
        if isinstance(other, str):
            return str(self) + other
        ...
    def __radd__(self, other):
        if isinstance(other, str):
            return other + str(self)
        ...

В "asdf" + thing, если "asdf".__add__ не знает, как обрабатывать добавление, Python пытается thing.__radd__("asdf").

17
задан vaxquis 23 December 2015 в 17:12
поделиться

7 ответов

var delimitedString = selectedValues.Aggregate((x,y) => x + ", " + y);
19
ответ дан 30 November 2019 в 09:59
поделиться
string.Join(", ", string[] enumerable)
34
ответ дан 30 November 2019 в 09:59
поделиться

Вот пример с StringBuilder. Хорошая вещь состоит в том что Append() возвраты StringBuilder сам экземпляр.

  return list.Aggregate( new StringBuilder(), 
                               ( sb, s ) => 
                               ( sb.Length == 0 ? sb : sb.Append( ',' ) ).Append( s ) );
23
ответ дан 30 November 2019 в 09:59
поделиться
var delimitedString = string.Join(",", checkboxList.Items.Where(i => i.Selected).Select(i => i.Value).ToArray());
4
ответ дан 30 November 2019 в 09:59
поделиться

AviewAnew является лучшим ответом, но если то, что Вы ищете, изучает, как думать в функциональном, что необходимо сделать, использовать операцию сгиба (или агрегат, как это называют в СЕТИ).

items.Aggregate((accum, elem) => accum + ", " + elem);
3
ответ дан 30 November 2019 в 09:59
поделиться

Ну, в этом случае функциональный подход не мог бы подойти лучше всего, просто потому что нет LINQ "ForEach", и Вы не хотите использовать конкатенацию строк: Вы хотите использовать StringBuilder. Вы могли использовать ToArray (пример просто появился выше), но я испытаю желание просто использовать:

    StringBuilder sb = new StringBuilder();
    foreach(ListViewItem item in checkboxList.SelectedItems) {
        if(sb.Length > 0) sb.Append(',');
        sb.Append(item.Text);
    }
    string s = sb.ToString();

Не функциональное программирование, но это работает..., конечно, если Ваш источник уже , строка [] тогда представляет в виде строки. Соединение прекрасно. (LINQ является большим инструментом, но не обязательно всегда лучшим инструментом для каждого задания)

2
ответ дан 30 November 2019 в 09:59
поделиться

Вот способ LINQ/functional сделать его.


string[] toDelimit = CallSomeFunction();
return toDelimit.Aggregate((x, y) => x + "," + y);
1
ответ дан 30 November 2019 в 09:59
поделиться
Другие вопросы по тегам:

Похожие вопросы: