给定一个包含数学表达式的字符串,给定一组函数/命令并给定一组赋值变量,.NET是否提供了快速构建解析器的工具?
我想构建一个简单的解析器来分析表达式并将其分解为最简单的组件,例如:
d*(abs(a-b)+sqrt(c))
变
f = abs(a-b) 和 g = sqrt(c)e = f + gd*e我读了这个问题和另一个问题.在这两个问题中的一个中,我还读到Guid Structure包含以下四个字段:Int32,Int16,Int16和Byte [8],因此两个Guid之间的比较应该更快.
好吧,我只使用Guid Structure来生成UUID,然后我只需要比较之前生成的UUID.因此,我想以可比较的格式快速转换生成的每个UUID.
我使用以下代码运行了一些测试(我从这个问题中获得灵感).
struct FastUuid
{
public long _part1;
public long _part2;
public FastUuid(byte[] value)
{
_part1 = BitConverter.ToInt64(value, 0);
_part2 = BitConverter.ToInt64(value, 8);
}
}
static void Main(string[] args)
{
TestUuidCompare(1000000000);
Console.ReadLine();
}
public static void TestUuidCompare(uint numberOfChecks)
{
Guid uuid1 = Guid.NewGuid();
Guid uuid2 = new Guid(uuid1.ToByteArray());
byte[] a1 = uuid1.ToByteArray();
byte[] a2 = uuid2.ToByteArray();
string s1 = uuid1.ToString();
string s2 = uuid2.ToString();
BigInteger b1 = new BigInteger(uuid1.ToByteArray());
BigInteger …Run Code Online (Sandbox Code Playgroud) 我有一个类似于下面(MyData类)的对象列表,我将使用LINQ查询来获取那些满足SecondDate属性约束的对象,最后根据所有属性对满足此约束的项进行排序.
public class MyData
{
public Nullable<DateTime> FirstDate {get; set;}
public DateTime SecondDate {get; set;}
public TimeSpan SimpleInterval {get; set;}
public double SimpleValue {get; set;}
...
}
Run Code Online (Sandbox Code Playgroud)
我写了以下查询,但我不知道如何处理该Nullable <DateTime> FirstDate属性.设置为此属性的项null应排序低于具有相同字段值的另一项,但此属性设置为非空值.
// public static void main
double threshold = ... // some initialization
DateTime now = DateTime.Now;
List<MyData> list = new List<MyData>();
...
var items = from item in list
where ((now - item.SecondDate).TotalSeconds < threshold))
orderby item.FirstDate descending
orderby item.SecondDate descending
orderby …Run Code Online (Sandbox Code Playgroud) 给定引用DateTime并给出要验证的DateTime,如何验证第二个日期属于第二天(从午夜开始)?
private bool IsTheNextDay(DateTime toBeVerified, DateTime referenceDate)
{
DateTime date = new DateTime(referenceDate.Year, referenceDate.Month, referenceDate.Day);
DateTime next = date.AddDays(1);
return (toBeVerified >= next);
}
Run Code Online (Sandbox Code Playgroud)
使用上面的源代码,它的工作原理.有其他更好的解决方案吗?
我创建了一个使用TTS引擎向用户发送反馈的应用程序.为了提高性能,我使用了synthesizeToFile和addSpeech方法,但是要合成的文本字符串在strings.xml文件中,所以我必须为TTS引擎说出的每个字符串调用这些方法.
由于TTS引擎仅使用其名称开头的字符串tts_,是可以很容易地遍历打头的所有字符串tts_的内部strings.xml文件?
我使用固定长度的数组实现了一个循环缓冲区.为了指向有效数据的开始,我使用了index(_startIndex).同样,为了指向有效数据的结尾,我使用另一个索引(_endIndex).以下是一个例子.
9 8 7 6 5 4 3 2 1 0 <-- array indices
3 2 1 0 5 4 <-- buffer indices
-----------------------------------------
| | | | | | | | | | |
-----------------------------------------
^ ^
_startIndex _endIndex
Run Code Online (Sandbox Code Playgroud)
现在我需要重新排列此缓冲区的元素:最小元素应移动到缓冲区的位置0,而最大元素应移动到缓冲区的位置5.
我的想法是基于以下方法.
int GetArrayIndex(int bufferIndex)
{
return (_startIndex + bufferIndex) % LENGTH;
// LENGTH is the length of the array
}
Run Code Online (Sandbox Code Playgroud)
这样,排序算法可以使用上述方法顺序读取缓冲区,因此不必知道缓冲区由同一阵列的两个非连续部分组成.是否有更好的方法来排序循环缓冲区?
假设视频流通过本地网络传输:一些 VLC 客户端通过 RTSP 接收视频流。客户端能否识别用于编码视频流的格式?换句话说,我如何识别用于对通过本地网络传输的视频流进行编码的格式?我很想知道用于编码视频流的格式是 H.264 还是其他格式。
我已经实现了一个使用查找表的快速比较功能.由于此函数在项目的多个类中使用,我需要确保在整个程序执行期间只有一个查找表副本.
查找表是一个简单vector<int>的大小65536.我希望这个表在程序开始时初始化,而不是在它第一次使用时.如何处理这个问题?
以下代码段是我的比较函数的当前版本.我相信通过创建lookup_table一个静态变量,问题将只能部分解决,因为静态变量的生命周期是在程序流第一次遇到声明时开始的.
int fast_compare(const char* array1, const char* array2, int length)
{
static const vector<int> lookup_table = init_lookup_table();
// process the input arrays...
// ...
return lookup_table[...];
}
vector<int> init_lookup_table()
{
vector<int> lut(65536);
// ----------------------------
// initialize the look-up table
// ...
// ...
// end of initialization
// ----------------------------
return lut;
}
Run Code Online (Sandbox Code Playgroud) 我需要计算相同长度的两个字节数组之间的距离.特别是,我正在寻找获得距离的方法,具有以下特点:
基本上,我正在寻找一种方法来衡量两个阵列之间的差异.
更新:如建议的那样,我提供了有关字节数组内容的以下附加信息.字节序列包含图像的特征,因此图像被分成小区域,并且为每个区域测量一些颜色信息(每个字节编码与单个区域有关的信息):当在一个字节内设置一个位时,那意味着该区域内存在给定的特征.
因此,给定两个字节序列,我想使用合适的距离度量进行比较.我读到了Bhattacharyya距离,但我不知道如何在这种情况下应用它,所以我想知道是否有其他距离测量来比较两个字节数组.
如本页所述
由于Android沙箱相互之间的应用程序,应用程序必须明确共享资源和数据.他们通过声明基本沙箱未提供的其他功能所需的权限来实现此目的,包括访问设备功能(如摄像头).
在我看来,在编译源代码时自动检测所需的权限会更有用.这样,根据应用程序源代码中使用的类和方法,编译器可以检测所需的权限.那么,为什么必须由开发人员明确声明Android权限?