小编Mik*_*ikk的帖子

什么是STARTwith和/或包含搜索的最快的字符串集合结构/算法

我有以下情况:我有一大堆字符串(比方说250.000+)平均长度可能为30.我要做的就是在这些内部进行很多搜索...大多数是StartsWith和Contains类型.

该集合在运行时是静态的.这意味着初始读数和填充选择只进行一次.因此,构建数据结构的性能绝对不重要.内存也不是问题:这也意味着我不介意在需要时有两个具有相同数据的集合(例如一个用于startswith而另一个用于contains).唯一重要的是搜索的性能,它应返回与搜索条件匹配的所有元素.

首先,我遇到了Trie或Radix-tree ..但也许还有更好的选择?

对于contains ..我根本没有任何好主意(除了在列表上运行linq查询时,该数据量不会非常快).

在此先感谢大家!

更新:我忘记了一个重要的部分:使用Contains我的意思是集合中没有完全匹配..但我想找到集合中包含给定searchstring的所有字符串

c# string algorithm collections search

9
推荐指数
1
解决办法
1162
查看次数

使用protobuf-net进行反序列化时阵列不匹配

我是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的数组,其中包含我的值. …

c# serialization protobuf-net

2
推荐指数
1
解决办法
266
查看次数

如何在矩形笔划上放置渐变并为其设置动画?

我正在玩 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 中,或者我应该从一开始就以不同的方式创建整个事物?要求是将动画放在边框或矩形的顶部。

欢迎任何提示!

更新:如克里斯的回答和我的评论..预期的外观是这样的: 例子 破折号在矩形周围徘徊

wpf xaml

1
推荐指数
1
解决办法
2159
查看次数

标签 统计

c# ×2

algorithm ×1

collections ×1

protobuf-net ×1

search ×1

serialization ×1

string ×1

wpf ×1

xaml ×1