Add Where, Select and RemoveAll to ArrayExtensions
This commit is contained in:
@@ -55,10 +55,8 @@ public:
|
|||||||
for (int32 i = 0; i < obj.Count(); i++)
|
for (int32 i = 0; i < obj.Count(); i++)
|
||||||
{
|
{
|
||||||
if (predicate(obj[i]))
|
if (predicate(obj[i]))
|
||||||
{
|
|
||||||
return i;
|
return i;
|
||||||
}
|
}
|
||||||
}
|
|
||||||
return INVALID_INDEX;
|
return INVALID_INDEX;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -74,10 +72,8 @@ public:
|
|||||||
for (int32 i = 0; i < obj.Count(); i++)
|
for (int32 i = 0; i < obj.Count(); i++)
|
||||||
{
|
{
|
||||||
if (predicate(obj[i]))
|
if (predicate(obj[i]))
|
||||||
{
|
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
}
|
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -93,13 +89,101 @@ public:
|
|||||||
for (int32 i = 0; i < obj.Count(); i++)
|
for (int32 i = 0; i < obj.Count(); i++)
|
||||||
{
|
{
|
||||||
if (!predicate(obj[i]))
|
if (!predicate(obj[i]))
|
||||||
{
|
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
}
|
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Filters a sequence of values based on a predicate.
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="obj">The target collection.</param>
|
||||||
|
/// <param name="predicate">The prediction function. Return true for elements that should be included in result list.</param>
|
||||||
|
/// <param name="result">The result list with items that passed the predicate.</param>
|
||||||
|
template<typename T, typename AllocationType>
|
||||||
|
static void Where(const Array<T, AllocationType>& obj, const Function<bool(const T&)>& predicate, Array<T, AllocationType>& result)
|
||||||
|
{
|
||||||
|
for (const T& i : obj)
|
||||||
|
{
|
||||||
|
if (predicate(i))
|
||||||
|
result.Add(i);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Filters a sequence of values based on a predicate.
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="obj">The target collection.</param>
|
||||||
|
/// <param name="predicate">The prediction function. Return true for elements that should be included in result list.</param>
|
||||||
|
/// <returns>The result list with items that passed the predicate.</returns>
|
||||||
|
template<typename T, typename AllocationType>
|
||||||
|
static Array<T, AllocationType> Where(const Array<T, AllocationType>& obj, const Function<bool(const T&)>& predicate)
|
||||||
|
{
|
||||||
|
Array<T, AllocationType> result;
|
||||||
|
Where(obj, predicate, result);
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Projects each element of a sequence into a new form.
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="obj">The target collection.</param>
|
||||||
|
/// <param name="selector">A transform function to apply to each source element; the second parameter of the function represents the index of the source element.</param>
|
||||||
|
/// <param name="result">The result list whose elements are the result of invoking the transform function on each element of source.</param>
|
||||||
|
template<typename TResult, typename TSource, typename AllocationType>
|
||||||
|
static void Select(const Array<TSource, AllocationType>& obj, const Function<TResult(const TSource&)>& selector, Array<TResult, AllocationType>& result)
|
||||||
|
{
|
||||||
|
for (const TSource& i : obj)
|
||||||
|
result.Add(MoveTemp(selector(i)));
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Projects each element of a sequence into a new form.
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="obj">The target collection.</param>
|
||||||
|
/// <param name="selector">A transform function to apply to each source element; the second parameter of the function represents the index of the source element.</param>
|
||||||
|
/// <returns>The result list whose elements are the result of invoking the transform function on each element of source.</returns>
|
||||||
|
template<typename TResult, typename TSource, typename AllocationType>
|
||||||
|
static Array<TResult, AllocationType> Select(const Array<TSource, AllocationType>& obj, const Function<TResult(const TSource&)>& selector)
|
||||||
|
{
|
||||||
|
Array<TResult, AllocationType> result;
|
||||||
|
Select(obj, selector, result);
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Removes all the elements that match the conditions defined by the specified predicate.
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="obj">The target collection to modify.</param>
|
||||||
|
/// <param name="predicate">A transform function that defines the conditions of the elements to remove.</param>
|
||||||
|
template<typename T, typename AllocationType>
|
||||||
|
static void RemoveAll(Array<T, AllocationType>& obj, const Function<bool(const T&)>& predicate)
|
||||||
|
{
|
||||||
|
for (int32 i = obj.Count() - 1; i >= 0; i--)
|
||||||
|
{
|
||||||
|
if (predicate(obj[i]))
|
||||||
|
obj.RemoveAtKeepOrder(i);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Removes all the elements that match the conditions defined by the specified predicate.
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="obj">The target collection to process.</param>
|
||||||
|
/// <param name="predicate">A transform function that defines the conditions of the elements to remove.</param>
|
||||||
|
/// <returns>The result list whose elements are the result of invoking the transform function on each element of source.</returns>
|
||||||
|
template<typename T, typename AllocationType>
|
||||||
|
static Array<T, AllocationType> RemoveAll(const Array<T, AllocationType>& obj, const Function<bool(const T&)>& predicate)
|
||||||
|
{
|
||||||
|
Array<T, AllocationType> result;
|
||||||
|
for (const T& i : obj)
|
||||||
|
{
|
||||||
|
if (!predicate(i))
|
||||||
|
result.Ass(i);
|
||||||
|
}
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Groups the elements of a sequence according to a specified key selector function.
|
/// Groups the elements of a sequence according to a specified key selector function.
|
||||||
/// </summary>
|
/// </summary>
|
||||||
@@ -109,7 +193,7 @@ public:
|
|||||||
template<typename TSource, typename TKey, typename AllocationType>
|
template<typename TSource, typename TKey, typename AllocationType>
|
||||||
static void GroupBy(const Array<TSource, AllocationType>& obj, const Function<TKey(TSource const&)>& keySelector, Array<IGrouping<TKey, TSource>, AllocationType>& result)
|
static void GroupBy(const Array<TSource, AllocationType>& obj, const Function<TKey(TSource const&)>& keySelector, Array<IGrouping<TKey, TSource>, AllocationType>& result)
|
||||||
{
|
{
|
||||||
Dictionary<TKey, IGrouping<TKey, TSource>> data(static_cast<int32>(obj.Count() * 3.0f));
|
Dictionary<TKey, IGrouping<TKey, TSource>> data;
|
||||||
for (int32 i = 0; i < obj.Count(); i++)
|
for (int32 i = 0; i < obj.Count(); i++)
|
||||||
{
|
{
|
||||||
const TKey key = keySelector(obj[i]);
|
const TKey key = keySelector(obj[i]);
|
||||||
|
|||||||
Reference in New Issue
Block a user