Вы хотите, чтобы все combinations()
от 1 до длины массива.
val arr = Array(4, 3, 1)
arr.indices.flatMap(x => arr.combinations(x + 1))
//res0: Seq[Array[Int]] = Vector(Array(4), Array(3), Array(1), Array(4, 3), Array(4, 1), Array(3, 1), Array(4, 3, 1))
update
Это даст вам все возможные комбинации, сохраняя оригинальный порядок и дублирующиеся элементы.
def subseqs[A](seq :Seq[A]) :List[Seq[A]] = seq match {
case hd +: tl =>
val res = subseqs(tl)
Seq(hd) :: res ++ res.map(hd +: _)
case Seq() => Nil
}
Результатом является List
из n ^ 2 - 1 возможных подпоследовательностей. Таким образом, для набора из 8 элементов вы получите 255 подпоследовательностей.
Это, конечно, будет способом слишком утомительным и неэффективным для ваших целей. Генерирование всех возможных подпоследовательностей, чтобы найти самое длинное увеличение, немного похоже на стирку всей одежды в вашем районе, поэтому утром у вас будут чистые носки.
Гораздо лучше генерировать только увеличивающиеся подпоследовательности и находить самые длинные из этого набора (9 строк кода).
Удалось это выяснить. Забыл, что DataTriggers предназначены для Style, ControlTemplate и DataTemplate согласно Документам MSDN.
Решением было использование EventTrigger в качестве указанного сообщения об ошибке. Мое решение заключалось в следующем:
<EventTrigger RoutedEvent="ToggleButton.Checked">
<BeginStoryboard>
<Storyboard>
<ObjectAnimationUsingKeyFrames Storyboard.TargetProperty="Visibility"
Storyboard.TargetName="LaunchButtons">
<DiscreteObjectKeyFrame KeyTime="0:0:0"
Value="{x:Static Visibility.Visible}" />
</ObjectAnimationUsingKeyFrames>
</Storyboard>
</BeginStoryboard>
</EventTrigger>
<EventTrigger RoutedEvent="ToggleButton.Unchecked">
<BeginStoryboard>
<Storyboard>
<ObjectAnimationUsingKeyFrames Storyboard.TargetProperty="Visibility"
Storyboard.TargetName="LaunchButtons">
<DiscreteObjectKeyFrame KeyTime="0:0:0"
Value="{x:Static Visibility.Collapsed}" />
</ObjectAnimationUsingKeyFrames>
</Storyboard>
</BeginStoryboard>
</EventTrigger>
Собираюсь пометить это как ответ, если у кого-то есть другое решение.
You could also bind the Visibility in your stackpanel to the IsChecked property in the ToggleButton. You would need to use a custom ValueConverter. Here is one I found online:
/// <summary>
/// WPF/Silverlight ValueConverter : Convert boolean to XAML Visibility
/// </summary>
[ValueConversion(typeof(bool), typeof(Visibility))]
public class VisibilityConverter : IValueConverter
{
public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
{
return (value != null && (bool)value) ? Visibility.Visible : Visibility.Collapsed;
}
public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)
{
Visibility visibility = (Visibility)value;
return (visibility == Visibility.Visible);
}
}