我目前正在进入OrientDB进行研究,以评估图数据库的版本控制功能.
OrientDB中的每条记录都有一个@version属性,每次更新记录时都会增加.这为版本控制支持提供了指示.我已经设置了一个简单的例子(使用OrientDB SQL)来测试它:
create class Product
create property Product.name string
create property Product.price integer
insert into Product (name, price) values ('Fridge', 449)
update Product set price = 479 where name = 'Fridge'
select from Product
Run Code Online (Sandbox Code Playgroud)
执行上面的语句后,我得到以下查询结果:
{
"result": [
{
"@type": "d",
"@rid": "#14:0",
"@version": 2,
"@class": "Product",
"name": "Fridge",
"price": 479
}
],
"notification": "Query executed in 0.031 sec. Returned 1 record(s)"
}
Run Code Online (Sandbox Code Playgroud)
在此数据库状态中 - 如何检索记录的先前版本(在这个简单的情况下为版本1)?这是通过OrientDB SQL语句和/或通过OrientDB Java API实现的吗?如果不是 - 那么@version属性的目的是什么?
感谢您的帮助!
我正在尝试实现LALR解析器生成器,如"编译器原理技术和工具"(也称为"龙书")中所述.
很多已经有效.解析器生成器当前能够生成完整的转到图.
Example Grammar:
S' --> S
S --> C C
C --> c C
C --> d
Nonterminals: S', S, C
Terminals: c, d
Start: S'
Run Code Online (Sandbox Code Playgroud)
转到图:
I[0]---------------+ I[1]-------------+
| S' --> . S , $ |--S-->| S' --> S . , $ |
| S --> . C C , $ | +----------------+
| C --> . c C , c |
| C --> . c C , d | I[2]--------------+
| C --> . d , …Run Code Online (Sandbox Code Playgroud) 是否可以在运行时更改方法体?
class Person
{
public void DoSth()
{ Console.WriteLine("Hello!"); }
}
Run Code Online (Sandbox Code Playgroud)
我想有一个简单的输入字段(如文本框),我可以在运行时编写方法体源代码.
文本框可能包含以下数据:
for (int i = 0; i < 5; i++)
Console.WriteLine(i);
Run Code Online (Sandbox Code Playgroud)
应该在什么时候进行
new Person().DoSth()
Run Code Online (Sandbox Code Playgroud)
叫做.
在C#(使用Reflection)中是否可以(或如何)?
感谢您的帮助.
编辑:
如果上述情况不可能,是否可以在运行时创建一个新方法并调用它?
我花了一些时间在C#中实现快速排序算法.完成后我比较了我的实现速度和C#的Array.Sort-Method.
我只是比较了随机int数组的速度.
这是我的实现:
static void QuickSort(int[] data, int left, int right)
{
int i = left - 1,
j = right;
while (true)
{
int d = data[left];
do i++; while (data[i] < d);
do j--; while (data[j] > d);
if (i < j)
{
int tmp = data[i];
data[i] = data[j];
data[j] = tmp;
}
else
{
if (left < j) QuickSort(data, left, j);
if (++j < right) QuickSort(data, j, right);
return;
}
}
}
Run Code Online (Sandbox Code Playgroud)
性能(当排序长度为100000000的随机int []时):
- 我的算法:14.21秒 …
我有一些数据存储在字节数组中。该数据包含一个 IPv4 数据包(其中包含一个 UDP 数据包)。
我想使用 C#(首选)或 C++ 通过网络原始发送这个数组。例如,我不想使用 C# 的 udp-client。
有谁知道如何执行此操作?
我目前正在研究数学优化问题的算法,并且必须处理以下情况.
在很多情况下,算法需要确定在这种情况下哪个子集S⊂N最好.
N = {0,1,2,...,126,127}
| S | ∈{0,1,2,3,4,5}(子集的大小在0到5之间)
这给出了可能的子集总数265.982.833.(binom(128,5)+ binom(128,4)+ ... + binom(128,0))
如果我预先计算所有可能的子集并将它们存储在一个数组中,那么这个数组将具有265.982.833个条目和大约1,27 GB的内存占用,而没有任何优化和子集作为字节数组的幼稚存储.
在这种情况下,当算法需要知道哪些元素在索引i的特定子集中时,只需要查表.然而,巨大的内存要求是不可接受的.
所以我的问题基本上是,如果有人能够想到一个算法来有效地计算基于索引i的子集中的元素,而不是需要预先计算的数组.
EDIT包含样本:
lookupTable [0] = {}
lookupTable [1] = {0}
...
lookupTable [127] = {126}
lookupTable [128] = {127}
lookupTable [129] = {0,1}
lookupTable [ 130] = {0,2}
...
lookupTable [265982832] = {123,124,125,126,127}
考虑以下代码:
static int Main() {
byte[] data = File.ReadAllBytes("anyfile");
SomeMethod(data);
...
}
static void SomeMethod(byte[] data) {
data[0] = anybytevalue; // this line should not be possible!!!
byte b = data[0]; // only reading should be allowed
...
}
Run Code Online (Sandbox Code Playgroud)
有没有一种方法可以在C#中只读传递byte []?复制不是解决方案.我不想浪费内存(因为文件可能会变得非常大).请记住表现!
我想用C#的UdpClient来监听任何收到的UDP数据包.我想从任何IP和任何端口接收数据包.
我尝试了以下方法:
UdpClient udpClient = new UdpClient(0);
IPEndPoint ep = new IPEndPoint(IPAddress.Any, 0);
byte[] data = udpClient.Receive(ref ep);
Run Code Online (Sandbox Code Playgroud)
但没有成功.
有谁知道什么是错的?提前致谢!
c# ×5
algorithm ×2
networking ×2
bytearray ×1
lalr ×1
optimization ×1
orientdb ×1
parsing ×1
readonly ×1
set ×1
sorting ×1
udp ×1
udpclient ×1
versioning ×1