지정된 키 선택기 함수에 따라 관찰 가능한 시퀀스의 요소를 그룹화하고 지정된 함수를 사용하여 결과 요소를 선택합니다.
네임스페이스:System.Reactive.Linq
어셈블리: System.Reactive(System.Reactive.dll)
Syntax
'Declaration
<ExtensionAttribute> _
Public Shared Function GroupByUntil(Of TSource, TKey, TElement, TDuration) ( _
source As IObservable(Of TSource), _
keySelector As Func(Of TSource, TKey), _
elementSelector As Func(Of TSource, TElement), _
durationSelector As Func(Of IGroupedObservable(Of TKey, TElement), IObservable(Of TDuration)) _
) As IObservable(Of IGroupedObservable(Of TKey, TElement))
'Usage
Dim source As IObservable(Of TSource)
Dim keySelector As Func(Of TSource, TKey)
Dim elementSelector As Func(Of TSource, TElement)
Dim durationSelector As Func(Of IGroupedObservable(Of TKey, TElement), IObservable(Of TDuration))
Dim returnValue As IObservable(Of IGroupedObservable(Of TKey, TElement))
returnValue = source.GroupByUntil(keySelector, _
elementSelector, durationSelector)
public static IObservable<IGroupedObservable<TKey, TElement>> GroupByUntil<TSource, TKey, TElement, TDuration>(
this IObservable<TSource> source,
Func<TSource, TKey> keySelector,
Func<TSource, TElement> elementSelector,
Func<IGroupedObservable<TKey, TElement>, IObservable<TDuration>> durationSelector
)
[ExtensionAttribute]
public:
generic<typename TSource, typename TKey, typename TElement, typename TDuration>
static IObservable<IGroupedObservable<TKey, TElement>^>^ GroupByUntil(
IObservable<TSource>^ source,
Func<TSource, TKey>^ keySelector,
Func<TSource, TElement>^ elementSelector,
Func<IGroupedObservable<TKey, TElement>^, IObservable<TDuration>^>^ durationSelector
)
static member GroupByUntil :
source:IObservable<'TSource> *
keySelector:Func<'TSource, 'TKey> *
elementSelector:Func<'TSource, 'TElement> *
durationSelector:Func<IGroupedObservable<'TKey, 'TElement>, IObservable<'TDuration>> -> IObservable<IGroupedObservable<'TKey, 'TElement>>
JScript does not support generic types and methods.
형식 매개 변수
- TSource
형식 원본입니다.
- TKey
형식 키입니다.
- TElement
type 요소입니다.
- TDuration
형식 기간입니다.
매개 변수
- source
형식: System.IObservable<TSource>
요소를 그룹화할 관찰 가능한 시퀀스입니다.
- keySelector
형식: System.Func<TSource, TKey>
각 요소에 대해 키를 추출하는 함수입니다.
- elementSelector
형식: System.Func<TSource, TElement>
각 원본 요소를 관찰 가능한 그룹의 요소에 매핑하는 함수입니다.
- durationSelector
형식: System.Func<IGroupedObservable<TKey, TElement>, IObservable<TDuration>>
그룹의 만료를 알리는 함수입니다.
반환 값
형식: System.IObservable<IGroupedObservable<TKey, TElement>>
동일한 키 값을 공유하는 모든 요소를 포함하는 고유한 키 값에 해당하는 관찰 가능한 그룹의 시퀀스입니다.
사용 정보
Visual Basic 및 C#에서는 IObservable TSource> 형식의 모든 개체에서 이 메서드를 instance 메서드로 호출할 수 있습니다<. 인스턴스 메서드 구문을 사용하여 이 메서드를 호출할 경우에는 첫 번째 매개 변수를 생략합니다. 자세한 내용은 또는 를 참조하세요.
설명
GroupByUntil 연산자는 관찰 가능한 시퀀스를 durationSelector 함수로 설정된 만료 시간 범위가 있는 관찰 가능한 그룹화된 시퀀스로 구분합니다.
예제
이 간단한 예제에서는 GroupByUntil 연산자를 사용하여 임의 정수의 연속 시퀀스를 10초 후에 만료되는 그룹으로 그룹화하는 방법을 보여 줍니다. Enter 키를 누르면 예제 코드가 종료됩니다.
using System;
using System.Reactive.Linq;
using System.Reactive.Concurrency;
namespace Example
{
class Program
{
static void Main()
{
//*****************************************************************************************//
//*** Generate a sequence of random integers less than 100 every seconds continuously. ***//
//*****************************************************************************************//
Random rand = new Random();
var obs = Observable.Generate(rand.Next(100), // Initial value
x => true, // The termination condition. Never terminate.
x => rand.Next(100), // Iteration step function
x => x, // Selector function
x => TimeSpan.FromMilliseconds(500), // timeSelector Delay function
Scheduler.ThreadPool); // Schedule on a .NET threadpool thread
//*************************************************************************************//
//*** Generate a groups of the random integers in the sequence that are in the 80s. ***//
//*** Each grouping has an expiration set to expire in 10 seconds. This is set by ***//
//*** the durationSelector function which returns an observable sequence of time ***//
//*** spans set to 10 seconds. ***//
//*************************************************************************************//
int groupExpirationSec = 10;
var obsEighties = obs.GroupByUntil(x => (x > 79) && (x < 90),
x => x,
x => Observable.Timer(TimeSpan.FromSeconds(groupExpirationSec)));
//*************************************************************************************//
//*** Subscribe to the grouped sequences. Each grouped sequence will expire after ***//
//*** 10 seconds by completing the sequence. Display timings with the sequence so ***//
//*** this is evident. ***//
//*************************************************************************************//
obsEighties.Subscribe(groupedObs =>
{
if (groupedObs.Key == true) // True for eighties group
{
Console.WriteLine("\nNew eighties group\nThis group should expire at {0}\n",
(DateTime.Now + TimeSpan.FromSeconds(groupExpirationSec)).ToLongTimeString());
groupedObs.Subscribe(x => Console.WriteLine(x),
() => Console.WriteLine("\nGrouped sequence completed or expired. {0}\n",
DateTime.Now.ToLongTimeString()));
}
});
Console.ReadLine();
}
}
}
다음 출력은 예제 코드를 사용하여 생성되었습니다.
New eighties group
This group should expire at 5:10:22 PM
86
88
81
81
89
Grouped sequence completed or expired. 5:10:22 PM
New eighties group
This group should expire at 5:10:33 PM
80
88
80
88
Grouped sequence completed or expired. 5:10:33 PM
New eighties group
This group should expire at 5:10:50 PM
81
83
83
82
81
Grouped sequence completed or expired. 5:10:50 PM
New eighties group
This group should expire at 5:11:01 PM
85
86
88
Grouped sequence completed or expired. 5:11:01 PM