вам нужно использовать .each()
для циклического перемещения по столбцам
$('.column').each(function(){
console.log($(this).find('.item').length);
});
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<div class="column">
<ul class="list">
<li class="item">item 1</li>
<li class="item">item 2</li>
<li class="item">item 3</li>
</ul>
</div>
<div class="column">
<ul class="list">
<li class="item">item 4</li>
<li class="item">item 5</li>
</ul>
</div>
<div class="column">
<ul class="list">
<li class="item">item 6</li>
</ul>
</div>
Используйте Func<T,string>
делегат.
public static void AppendCollection<T>(this StringBuilder sb,
IEnumerable<T> collection, Func<T, string> method) {
foreach(T x in collection)
sb.AppendLine(method(x));
}
public static void AppendCollection<T>(this StringBuilder builder, IEnumerable<T> list, Func<T,string> func)
{
foreach (var item in list)
{
builder.AppendLine(func(item));
}
}
Я не возвратил бы строку, я просто добавлю ее к исходному Stringbuilder, который был передан в.
Я не уверен, что необходимо работать что трудно:
public static void AppendCollection( this StringBuilder builder,
ICollection collection )
{
foreach (var item in collection)
{
builder.AppendLine( Convert.ToString( item ) );
}
}
Используемый как
List<Person> people = ...
StringBuilder builder = new StringBuilder();
builder.AppendCollection( people );
var s = builder.ToString();
Конечно, Человек должен переопределить ToString () для создания корректного вывода для объекта Человека.
Что-то как:
public static void AppendCollection<TItem>(this StringBuilder builder, IEnumerable<TItem> items, Func<TItem, string> valueSelector)
{
foreach(TItem item in items)
{
builder.Append(valueSelector(item));
}
}
Я добавил бы в полезном значении по умолчанию для сохранения specifiying лямбда в 90% случаев...
public static void AppendCollection<TItem>(this StringBuilder builder, IEnumerable<TItem> items)
{
AppendCollection(builder, items, x=>x.ToString());
}
Моя версия:
public static string AppendCollection<T>(this StringBuilder sb, IEnumerable<T> enumerable, Func<T, string> method)
{
List<T> l = new List<T>(enumerable);
l.ForEach(item => sb.AppendLine(method(item)));
return sb.ToString();
}
но Вы не должны возвращать строку в этом случае. Я предпочел бы следующее:
public static void AppendCollection<T>(this StringBuilder sb, IEnumerable<T> enumerable, Func<T, string> method)
{
List<T> l = new List<T>(enumerable);
l.ForEach(item => sb.AppendLine(method(item)));
}
использоваться как:
sb.AppendCollection(people, p => p.ToString());
sb.AppendCollection(orders, o => o.ToString());
Console.WriteLine(sb.ToString());
static class SBExtention
{
static string AppendCollection<T>(this StringBuilder sb,
IEnumerable<T> coll,
Func<T,string> action)
{
foreach(T t in coll)
{
sb.Append(action(t));
sb.Append("\n");
}
return sb.ToString();
}
}
Однако я думаю, что Вы будете более обеспеченным наличием, оно возвращает StringBuilder. Тем путем Вы могли объединить его в цепочку:
static StringBuilder AppendCollection<T>(this StringBuilder sb,
IEnumerable<T> coll,
Func<T,string> action)
{
// same
return sb;
}
представьте peopleAndOrders в виде строки = сурьма. AppendCollection (люди, p => p. ToString ()).AppendCollection (заказы, o => o. ToString ()).ToString ();
И я соглашаюсь с Jennifer о случае по умолчанию:
public static StringBuilder AppendCollection<TItem>(
this StringBuilder builder,
IEnumerable<TItem> items)
{
return AppendCollection(builder, items, x=>x.ToString());
}
представьте peopleAndOrders в виде строки = сурьма. AppendCollection (люди).AppendCollection (заказы).ToString ();
Каков этот метод, предполагают для возврата? Я вижу строку, но почему, если Вы добавляете к StringBuilder?
То, что Вы пытаетесь сделать, довольно легко, но необходимо объяснить точно, что Вы хотите.
Обновление:
Вот мое взятие. Используя дополнительный метод для этого глупо и бессмыслен, если Вы просто собираетесь передать в новом StringBuilder и возвратить строку.
Обновление 2:
Теперь, когда я вижу, что использование, что Вы делаете, является плохой практикой. То, что необходимо идеально делать, является чем-то как:
public static string Print<T>(this IEnumerable<T> col, Func<T,string> printer)
{
var sb = new StringBuilder();
foreach (T t in col)
{
sb.AppendLine(printer(t));
}
return sb.ToString();
}
string[] col = { "Foo" , "Bar" };
string lines = col.Print( s => s);
Обновление 3:
После большего количества разъяснения:
public static void AppendCollection<T>(this StringBuilder sb,
List<T> col, Func<T,string> printer)
{
col.ForEach( o => sb.AppendLine(printer(o)));
}
(который совпадает с bruno конусовидный, сказал),
И теперь Вам действительно больше не нужен он :)