我有以下情况:我有一大堆字符串(比方说250.000+)平均长度可能为30.我要做的就是在这些内部进行很多搜索...大多数是StartsWith和Contains类型.
该集合在运行时是静态的.这意味着初始读数和填充选择只进行一次.因此,构建数据结构的性能绝对不重要.内存也不是问题:这也意味着我不介意在需要时有两个具有相同数据的集合(例如一个用于startswith而另一个用于contains).唯一重要的是搜索的性能,它应返回与搜索条件匹配的所有元素.
首先,我遇到了Trie或Radix-tree ..但也许还有更好的选择?
对于contains ..我根本没有任何好主意(除了在列表上运行linq查询时,该数据量不会非常快).
在此先感谢大家!
更新:我忘记了一个重要的部分:使用Contains我的意思是集合中没有完全匹配..但我想找到集合中包含给定searchstring的所有字符串
我是protobuf-net的初学者,所以这可能只是一些愚蠢的初学者错误.但我无法找到这个问题:
我有一个类被序列化到磁盘定义如下:
[ProtoContract]
public class SerializableFactors
{
[ProtoMember(1)]
public double?[] CaF {get;set;}
[ProtoMember(2)]
public byte?[] CoF { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
和测试定义如下:
if (File.Exists("factors.bin"))
{
using (FileStream file = File.OpenRead("factors.bin"))
{
_factors = Serializer.Deserialize<SerializableFactors>(file);
}
}
else
{
_factors = new SerializableFactors();
_factors.CaF = new double?[24];
_factors.CaF[8] = 7.5;
_factors.CaF[12] = 1;
_factors.CaF[18] = 1.5;
_factors.CoF = new byte?[24];
_factors.CoF[8] = 15;
_factors.CoF[12] = 45;
_factors.CoF[18] = 25;
using (FileStream file = File.Create("factors.bin"))
{
Serializer.Serialize(file, _factors);
}
}
Run Code Online (Sandbox Code Playgroud)
所以基本上如果文件不存在,我创建一个具有默认值的对象并将其序列化为磁盘.如果文件存在,我会将其加载到内存中.
但是我加载文件的结果不是我在保存到磁盘之前创建的.我创建了长度为24的数组,它们在插槽8,12和18中具有值.但是反序列化对象具有长度为3的数组,其中包含我的值. …
我正在玩 WPF 动画,并试图以游荡的笔触(一种只有一只蚂蚁的行军蚂蚁)的方式为矩形的边界设置动画,并提出了以下工作代码:
<Window
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008" xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" mc:Ignorable="d" x:Class="WindowTest.MainWindow"
Height="454.719" Width="429.847" ResizeMode="NoResize">
<Window.Resources>
<Storyboard x:Key="MarchingAnts">
<DoubleAnimationUsingKeyFrames BeginTime="00:00:00"
Storyboard.TargetName="rectangle"
Storyboard.TargetProperty="(Shape.StrokeDashOffset)"
RepeatBehavior="Forever">
<SplineDoubleKeyFrame KeyTime="00:00:00" Value="0"/>
<SplineDoubleKeyFrame KeyTime="00:00:03.000000" Value="-385"/>
</DoubleAnimationUsingKeyFrames>
</Storyboard>
</Window.Resources>
<Window.Triggers>
<EventTrigger RoutedEvent="FrameworkElement.Loaded">
<BeginStoryboard Storyboard="{StaticResource MarchingAnts}"/>
</EventTrigger>
</Window.Triggers>
<Grid x:Name="LayoutRoot">
<Canvas x:Name="canvas" Background="#FF262626">
<Rectangle Fill="#14FFFFFF"
Stroke="Red"
x:Name="rectangle" Width="400" Height="400"
StrokeDashOffset="-385" StrokeDashArray='0, 0, 100,285' StrokeThickness="4"
RadiusX="25" RadiusY="25"
Canvas.Left="10" Canvas.Top="10">
</Rectangle>
</Canvas>
</Grid>
</Window>
Run Code Online (Sandbox Code Playgroud)
所以我基本上有一只长度为 100 的“蚂蚁”在宽度为 400 的正方形周围徘徊。现在我想找到一种方法来在“蚂蚁”上放置渐变,例如将其从 50% 淡出到结束。
有没有办法将这样的添加到动画 StrokeDashArray 中,或者我应该从一开始就以不同的方式创建整个事物?要求是将动画放在边框或矩形的顶部。
欢迎任何提示!