public static IEnumerable <TResult> GroupJoin <TKey, TSource, TInner, TResult>(this IndexDefinition <TSource> source, IEnumerable <TInner> inner, Func <TInner, TKey> innerKeySelector, Expression <Func <TSource, TKey> > outerKeySelector, Func <TSource, IEnumerable <TInner>, TResult> resultSelector, IEqualityComparer <TKey> equalityComparer) { Dictionary <TKey, Tuple <TSource, List <TInner> > > dictionary = new Dictionary <TKey, Tuple <TSource, List <TInner> > >(); foreach (TInner innerItem in inner) { TKey key = innerKeySelector(innerItem); var value = IndexFinder.FindInIndex(source, outerKeySelector, key, equalityComparer); if (value != null) { if (dictionary.ContainsKey(key)) { Tuple <TSource, List <TInner> > tuple = dictionary[key]; tuple.Item2.Add(innerItem); } else { List <TInner> list = new List <TInner>(); list.Add(innerItem); dictionary.Add(key, new Tuple <TSource, List <TInner> >(value, list)); } } } foreach (KeyValuePair <TKey, Tuple <TSource, List <TInner> > > key in dictionary) { yield return(resultSelector(key.Value.Item1, key.Value.Item2)); } }
public void IndexFinder_StringArray_Index() { string[] array = new string[] { "45", "top", "dfr", "pop", "seq" }; string key = "dfr"; int actual = IndexFinder.BinarySearch <string>(array, key, null); int expected = 2; Assert.AreEqual(actual, expected); }
public void IndexFinder_IntArray_Index() { int[] array = new int[] { -9, 6, 45, 78, 495687 }; int key = 78; int actual = IndexFinder.BinarySearch <int>(array, key, null); int expected = 3; Assert.AreEqual(actual, expected); }
public static IEnumerable <TResult> Join <TKey, TSource, TInner, TResult>(this IndexDefinition <TSource> source, IEnumerable <TInner> inner, Func <TInner, TKey> innerKeySelector, Expression <Func <TSource, TKey> > outerKeySelector, Func <TSource, TInner, TResult> resultSelector) { foreach (TInner innerItem in inner) { TKey key = innerKeySelector(innerItem); var value = IndexFinder.FindInIndex(source, outerKeySelector, key, null); if (value != null) { yield return(resultSelector(value, innerItem)); } } }
public void IndexFinder_UnsortedArray_ThrowArgumentException() { Assert.Throws <ArgumentException>(() => IndexFinder.BinarySearch <int>(new int[] { 5, 67, -5, 123 }, 0, null)); }
public void IndexFinder_InvalidKey_ThrowArgumentException() { Assert.Throws <ArgumentException>(() => IndexFinder.BinarySearch <int>(new int[] { 5, 67, 65, 123 }, 0, null)); }
public void IndexFinder_ArrayIsNull_ThrowArgumentNullException() { Assert.Throws <ArgumentNullException>(() => IndexFinder.BinarySearch <int>(null, 5, null)); }
public void IndexFinder_EmptyArray_ThrowArgumentException() { Assert.Throws <ArgumentException>(() => IndexFinder.BinarySearch <int>(new int[] { }, 5, null)); }